package com.navi.mould1.reportUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 匹配工具类
 */
public class LKingMatcherUtils {

    /** EL表达式 */
    public static final String REGEX_EL = "\\$\\{[^\\}]+\\}";


    /**
     * 构造方法
     */
    private LKingMatcherUtils() {
    }


    /**
     * 获取匹配对象
     * @param regex 正则表达式
     * @param input 待匹配字符串
     * @return 匹配对象
     */
    public static Matcher getMatcher(final String regex, final String input) {
        return Pattern.compile(regex).matcher(input);
    }


    /**
     * 匹配字符串
     * @param regex 正则表达式
     * @param input 待匹配字符串
     * @return 匹配成功返回true，否则返回false。
     */
    public static boolean matches(final String regex, final String input) {
        return getMatcher(regex, input).matches();
    }


    /**
     * 替换EL表达式
     * @param str 待替换字符串
     * @param map 替换用的EL表达式集合
     * @return 替换结果字符串
     */
    public static String el(String str, Map<String, String> map) {
        Map<String, String> containsMap = new HashMap<>();

        Matcher matcher = getMatcher(REGEX_EL, str);

        while (matcher.find()) {
            String group = matcher.group();
            String key = group.substring(2, group.length() - 1);
            containsMap.put(key, map.get(key));
        }

        if (!containsMap.isEmpty()) {
            for (Map.Entry<String, String> entry : map.entrySet()) {
                str = str.replaceAll("\\$\\{" + entry.getKey() + "\\}", entry.getValue());
            }
        }

        return str;
    }

}
